package com.interface_接口.接口的多态;

public class 多态数组 {  //409
    public static void main(String[] args) {
        Person p[] = new Person[4]; // 多态数组
        p[0] = new Man("成龙");  //向上转型
        p[1] = new Woman("碧莉"); //向上转型
        p[2] = new Man("史密斯"); //向上转型
        p[3] = new Woman("海克斯"); //向上转型

        for (int i = 0; i < 4; i++) {
            p[i].eat(); //动态绑定   根据运行类型调用公共的接口的方法

            if (p[i] instanceof Man){  // 判断运行类型是否是Man类型
                ((Man)p[i]).sleep();  //如果是Man类型，向下转型，强转成Man类型  ，就调用Man特有的方法
            }else {   // 如果不是Man类型，就向下转型，强转成Woman类型，就调用Woman特有的方法
                ((Woman)p[i]).sleep();
            }

            System.out.println("===============================");
        }



    }
}



interface Person{  //接口
    void eat();  // 抽象方法
}


class Man implements Person{
    private String name;

    public Man(String name) {
        this.name = name;
    }

    @Override
    public void eat() {//实现接口方法
        System.out.println("这个男人"+name+"在吃饭");
    }
    public void sleep(){  //特有的方法
        System.out.println("这个男人"+name+"睡觉打呼噜。。。。");
    }
}


class Woman implements Person{
    private String name;

    public Woman(String name) {
        this.name = name;
    }

    @Override
    public void eat() { //实现接口方法
        System.out.println("这个女人"+name+"在吃饭");
    }
    public void sleep(){  //特有的方法
        System.out.println("这个女人"+name+"安静的睡觉。。。。");
    }
}
